const path = require('path');
// 阿里云
// const OSS = require('ali-oss');
// const client = new OSS({
// 	// yourregion填写Bucket所在地域。以华东1（杭州）为例，Region填写为oss-cn-hangzhou。
// 	region: 'oss-cn-beijing',
// 	// 从环境变量中获取访问凭证。运行本代码示例之前，请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
// 	accessKeyId: 'LTAIzqCdNyXr6wHW',
// 	accessKeySecret: '8CkRWX5Fv5hHQp8JWb3JEZBsDyYXLU',
// 	// 填写Bucket名称。
// 	bucket: 'yxzyl'
// });

// 腾讯云
const COS = require('cos-nodejs-sdk-v5');
const cos = new COS({
	SecretId: '-------', // 推荐使用环境变量获取；用户的 SecretId，建议使用子账号密钥，授权遵循最小权限指引，降低使用风险。子账号密钥获取可参考https://cloud.tencent.com/document/product/598/37140
	SecretKey: '------' // 推荐使用环境变量获取；用户的 SecretKey，建议使用子账号密钥，授权遵循最小权限指引，降低使用风险。子账号密钥获取可参考https://cloud.tencent.com/document/product/598/37140
});

const Bucket = '-----'; // 存储桶名称，由bucketname-appid 组成，appid必须填入，可以在COS控制台查看存储桶名称。
const Region = '----'; //存储桶Region可以在COS控制台指定存储桶的概览页查看 https://console.cloud.tencent.com/cos5/bucket/

/*
 * 单个上传文件到腾讯云
 * @param {string} fileName - 要上传的文件名称，确保在存储桶中唯一
 * @param {string} filePath - 本地文件路径，指定要上传的文件位置
 */

const cosUpload = function (ossDirectory, filename) {
	// 图片的绝对路径
	let filePath = path.join(__dirname, '../', 'public/uploads/', filename);

	// oss 的文件夹名称 + 文件名(这里路径拼接使用path.posix)
	let directory = path.posix.join(process.env.NODE_ENV, ossDirectory, filename);

	return new Promise((resolve, reject) => {
		cos.uploadFile(
			{
				Bucket,
				Region,
				Key: directory,
				FilePath: filePath, // 本地文件地址，需自行替换
				SliceSize: 1024 * 1024 * 5 // 触发分块上传的阈值，超过5MB使用分块上传，非必须
			},
			function (err, data) {
				if (err) {
					reject(err);
				} else {
					resolve(data);
				}
			}
		);
	});
};

/**
 * 删除文件
 * @param {string} fileName - 要删除的文件名称
 */
const cosDelete = function (ossDirectory, filename) {
	// oss 的文件夹名称 + 文件名(这里路径拼接使用path.posix)
	let directory = path.posix.join(process.env.NODE_ENV, ossDirectory, filename);

	return new Promise((resolve, reject) => {
		cos.deleteObject(
			{
				Bucket,
				Region,
				Key: directory
			},
			function (err, data) {
				if (err) {
					reject(err);
				} else {
					resolve(data);
				}
			}
		);
	});
};


// 批量上传
const cosBatchUpload = function (ossDirectory, files) {
	let directory = path.posix.join(process.env.NODE_ENV, ossDirectory);
	let newFiles = files.map((item) => {
		return {
			Bucket,
			Region,
			Key: path.posix.join(directory, item.filename),
			FilePath: path.join(__dirname, '../', 'public/uploads/', path.basename(item.path))
		};
	});

	return new Promise((resolve, reject) => {
		cos.uploadFiles(
			{
				files: newFiles,
				SliceSize: 1024 * 1024 * 10 // 设置大于10MB采用分块上传
			},
			function (err, data) {
				if (err) {
					reject(err);
				} else {
					resolve(data);
				}
			}
		);
	});
};

module.exports = {
	cosUpload,
	cosDelete,
	cosBatchUpload
};
